import Vue from 'vue'

// 具体的组件
import auditConfirm from './auditConfirm.vue'
auditConfirm.newInstance = (properties) => {
  const props = properties || {}
  // 实例化一个组件，然后挂载到body上
  const Instance = new Vue({
    data: props,
    render(h) {
      return h(auditConfirm, {
        props: props,
      })
    },
  })
  const component = Instance.$mount()
  document.body.appendChild(component.$el)
  // 通过闭包维护alert组件的引用
  const audit = Instance.$children[0]
  return {
    // Alert组件对外暴露的两个方法
    add(options) {
      audit.add(options)
    },
  }
}

// 提示单例
let messageInstance
function getMessageInstance() {
  messageInstance = messageInstance || auditConfirm.newInstance()
  return messageInstance
}
function notice(options) {
  // 等待接口调用的时候再实例化组件，避免进入页面就直接挂载到body上
  const instance = getMessageInstance()
  instance.add({
    url: options.url,
    data: options.data,
    ...options
  })
}

// 对外暴露的方法
export default {
  doConfirm(options) {
    return notice(options)
  },
}
